﻿using System;
using System.Collections.Generic;
using System.Text;

namespace DBHelper
{
    public interface IRepository<T>
    {
        bool IsNew(T obj);
        object Insert(T obj);
        int Update(T obj, IEnumerable<string> columns);
        //int Update(string sql, params object[] args);
        //int Update(Sql sql);
        int Delete(T obj);
        //int Delete(string sql, params object[] args);
        //int Delete(Sql sql);
        int Delete(object primaryKey);
        bool Exists(object primaryKey);
        T SingleOrDefault(object primaryKey);
        //T SingleOrDefault(string sql, params object[] args);
        //T SingleOrDefault(Sql sql);
        //T FirstOrDefault(string sql, params object[] args);
        //T FirstOrDefault(Sql sql);
        T Single(object primaryKey);
        //T Single(string sql, params object[] args);
        //T Single(Sql sql);
        //T First(string sql, params object[] args);
        //T First(Sql sql);
        //List<T> Fetch(string sql, params object[] args);
        //List<T> Fetch(Sql sql);
        //List<T> Fetch(long page, long itemsPerPage, string sql, params object[] args);
        //List<T> Fetch(long page, long itemsPerPage, Sql sql);
        //List<T> SkipTake(long skip, long take, string sql, params object[] args);
        //List<T> SkipTake(long skip, long take, Sql sql);
        //Page<T> Page(long page, long itemsPerPage, string sql, params object[] args);
        //Page<T> Page(long page, long itemsPerPage, Sql sql);
        //List<T> Query(string sql, params object[] args);
        //List<T> Query(Sql sql);

        int Update(T k);
        void Save(T k);
    }
}
